import random

# 定义一个函数来模拟抛一枚硬币
def flip_coin():
    return random.choice(['H', 'T'])  # 'H' 代表正面，'T' 代表反面

# 定义一个函数来模拟抛三枚硬币，并返回结果
def flip_three_coins():
    # 使用列表推导式生成三个硬币的抛掷结果
    return [flip_coin() for _ in range(3)]

# 主程序开始
if __name__ == "__main__":
    # 抛三枚硬币10次，并打印每次的结果
    for i in range(10):
        # 调用 flip_three_coins 函数得到三枚硬币的抛掷结果
        result = flip_three_coins()
        # 打印本次抛掷的编号和结果
        print(f"Trial {i + 1}: {result}")

    # 统计每个可能结果（HHH, HHT, HTH, HTT, THH, THT, TTH, TTT）出现的次数
    count_dict = {}
    possible_results = ['HHH', 'HHT', 'HTH', 'HTT', 'THH', 'THT', 'TTH', 'TTT']
    for result in possible_results:
        count_dict[result] = 0  # 初始化计数器为0

    # 抛三枚硬币10000次以统计结果
    for _ in range(10000):
        # 得到三枚硬币的抛掷结果，并将其转换为字符串形式（例如 'HHT'）
        result_str = ''.join(flip_three_coins())
        # 更新对应结果的计数器
        count_dict[result_str] += 1

    # 打印每个可能结果及其出现的次数和概率
    for result in possible_results:
        count = count_dict[result]
        probability = count / 10000  # 计算概率
        print(f"{result}: {count} times, probability = {probability:.4f}")